package com.itheima.tliasmanagementspringboot.config;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/*@Component
@Aspect //当前类为切面类,只能在类上*/
@Slf4j
public class TimeAspectbackup {
    //注解:(== 前+后)环绕:在方法前执行
    @Around("execution(* com.itheima.tliasmanagementspringboot.service.*.*(..))")
    //ProceedingJoinPoint可以操作原始方法的所有内容(如参数,返回值,方法名,方法上的注解等等)
    public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {
        //记录方法执行开始时间
        long begin = System.currentTimeMillis();

        //执行原始方法
        //只要这行代码报错,就是原始代码报错
        Object result = pjp.proceed();//相当于将原始方法调用,利用反射,注释掉,原始方法就不会执行了,就削弱了功能了,返回值也一定要返回,否则就是削弱了原始方法的返回值

        //记录方法执行结束时间
        long end = System.currentTimeMillis();

        //计算方法执行耗时
        log.info(pjp.getSignature()+"执行耗时: {}毫秒",end-begin);

        return result;
    }
}